概要
Microsoft SQL Server 2016 のクエリ実行プランによっては、テーブルまたはインデックス スキャンまたは範囲操作でフィルターを評価するパターンが含まれているものがあります。たとえば、フィルター述語の一部がインデックス キーと一致している場合、インデックス シークや範囲スキャンの実行に使用されることがあります。述語の残余部分は、残余と呼ばれ、スキャンまたは範囲操作によって各行の出力ごとに評価する必要があります。これはフィルター演算子に対応します。なお、SQL Server では、パフォーマンスを向上するために、これらのフィルターをテーブル アクセスの演算子自体にプッシュダウンすることもできます。
このアプローチにより全体のパフォーマンスは向上しますが、状況によっては (パラメーター感度に関連する基数推定が不正確な場合など)、scan-below フィルターが想定より多くの行数を処理する場合もあります。このような動作は、実際の実行プランを使ってクエリのパフォーマンスのトラブルシューティングを行うときに、表面に出ない可能性があります。というのも、返される行数は残余述語が適用された後の行数であり、テーブルやインデックスからスキャンされた実際の行数ではないからです。
更新プログラムの情報
「現象」で説明したシナリオの診断を改善するために、SQL Server 2016 Service Pack 1 (SP1) では、新しいプラン表示 XML 属性である Estimated Rows Read が導入されます。この属性では、演算子が残余述語の適用前に行の推定カウントを読み込みます。この更新プログラムは KB 3107397 を補完しています。
この機能は、SQL Server 2016 の Service Pack 1 に含まれています。
SQL Server 2016 の新しいビルドには、以前のビルドに含まれていたすべての修正プログラムおよびセキュリティ修正プログラムが含まれています。SQL Server 2016 の最新ビルドをインストールすることをお勧めします。
関連情報
マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。